zsh 历史记录损坏的修复
zsh 启动时如果报 zsh: corrupt history file /home/user/.zsh_history,说明历史文件已经损坏,zsh 拒绝加载它。修复思路很简单:用 strings 把文件里的不可打印字符剥离,重建一份能正常解析的历史文件,全程不需要重启终端。
损坏的常见原因
- 历史文件中混入了不可打印字符,例如误把二进制内容粘贴进了终端
- 多个 shell 会话同时写入同一个历史文件,写入过程互相干扰
- 写入历史时进程被异常终止,留下不完整的记录
修复步骤
bash
cd ~ # 进入 home 目录
mv .zsh_history .zsh_history_bad # 把损坏的历史文件改名备份
strings .zsh_history_bad > .zsh_history # 只保留可打印字符,重建历史文件
fc -R .zsh_history # 在当前会话重新加载历史 逐行说明:
mv先把原文件改名,损坏的原始数据保留在.zsh_history_bad里,修复失败也不会丢数据strings只输出文件中的可打印文本,混入的二进制字符被剥离,zsh 即可正常解析重建后的文件fc -R把重建后的历史读回当前 shell;省略这一步则需要重开终端才能恢复
重建后如果发现个别命令丢了,可以从 .zsh_history_bad 里人工挑回——大部分行仍然是完好的,只是个别行夹带坏字符。确认无误后再删除备份。
要点
- 报错本质是历史文件里出现了 zsh 无法解析的内容,剥离不可打印字符即可恢复
- 四步操作:改名备份、
strings重建、fc -R重载,无需重启终端 - 修复不改变写入行为;如果损坏反复出现,优先排查是否有多个会话在同时写同一个历史文件